home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TeX 1995 July
/
TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO
/
macros
/
latex209
/
contrib
/
changebar
/
chbar.sh
(
.txt
)
< prev
Wrap
LaTeX Document
|
1994-04-18
|
3KB
|
85 lines
******************************* snip snip ****************************
#! /bin/sh
# Gadget to take two LaTeX files and produce a third which
# has changebars highlighting the difference between them.
# Version 1.1
# Author:
# Don Ward, Careful Computing (don@careful.co.uk)
# v1.0 April 1989
# v1.1 Feb 93 Amended to use changebar.sty (v3.0) and dvips
# Useage:
# chbar file1 file2 [output]
# (default output is stdout)
# chbar old
# (new file on stdin, output on stdout)
# Method:
# 1 Use diff to get an ed script to go from file1 to file2.
# 2 Breath on it a bit (with sed) to insert changebar commands.
# 3 Apply modified ed script to produce (nearly) the output.
# 4 Use awk to insert the changebars option into the \documentstyle
# and to handle changebar commands inside verbatim environments.
# 5 Remove changebars before \begin{document} with sed
if test $# -eq 0
then cat <<\xEOF
Useage:
chbars old new [output]
chbars old
exit 0
# Strictly speaking, should check that $TMP doesn't exist already.
TMP=/tmp/chb-$$
export TMP
OLD=$1
if test $# -eq 1
then NEW="-"; # arg is old file, take new from stdin
else NEW=$2 ;
# sed commands to edit ed commands to edit old file
cat <<\xEOF > $TMP
/^\.$/i\
\\cbend{}%
/^[0-9][0-9]*[ac]$/a\
\\cbstart{}%
/^[0-9][0-9]*,[0-9][0-9]*[ac]$/a\
\\cbstart{}%
/^[0-9][0-9]*d$/a\
\\cbdelete{}%\
/^[0-9][0-9]*,[0-9][0-9]*d$/a\
\\cbdelete{}%\
diff -b -e $OLD $NEW | ( sed -f $TMP ; echo w ${TMP}1 ; echo q ) | ed - $OLD
# awk commands to insert Changebars style and to protect
# changebar commands in verbatim environments
# and to tell what driver is in use
cat <<\xEOF >$TMP
/^\\documentstyle/{
if (index($0, "changebar") == 0 ) {
opts = index($0, "[")
if (opts > 0)
printf "%schangebar,%s",substr($0,1,opts),substr($0,opts+1)
else
printf "\\documentstyle[changebar]%s\n", substr($0,15)
next
/\\begin{document}/ {print "\\driver{dvips}"}
/\\begin{verbatim}/{++nesting}
/\\end{verbatim}/{--nesting}
/\\cbstart{}%|\\cbend{}%|\cbdelete{}%/ {
if ( nesting > 0) {
# changebar command in a verbatim environment: Temporarily exit,
# do the changebar command and reenter.
# The obvious ( printf "\\end{verbatim}%s\\begin{verbatim} , $0 )
# leaves too much vertical space around the changed line(s).
# The following magic seeems to work
print "\\end{verbatim}\\nointerlineskip"
print "\\vskip -\\ht\\strutbox\\vskip -\\ht\\strutbox"
printf "\\vbox to 0pt{\\vskip \\ht\\strutbox%s\\vss}\n", $0
print "\\begin{verbatim}"
next
{ print $0 }
awk -f $TMP ${TMP}1 >${TMP}2
# sed commands to clean up unwanted changebars
# (those before \begin{document})
cat <<xEOF >$TMP
1,/\\begin{document}/s/\\\\cb[sed][tne][adl][^{}]*{}%$/%/
if test $# -le 2 || test $3 = '-'
then sed -f $TMP ${TMP}2
else sed -f $TMP ${TMP}2 >$3
rm $TMP ${TMP}[0-9]